import { defineStore } from 'pinia'
import {
  getPartyCategory,
  getPartyOrgUserAll,
  getPoliticalAll,
  getRegionAll,
  getGovOrgV2All
} from '@/service/api/sys/user/user'
import { ref } from 'vue'

interface dictItemType {
  id?: Number
  label?: String
  value?: Number
  name?: String
  children?: Array<dictItemType>
  childrenList?: Array<dictItemType>
}

// 字典仓库

export const useDictStore = defineStore(
  'dict',
  () => {
    const region = ref<Array<dictItemType>>([]) // 行政区
    const political = ref<Array<dictItemType>>([]) // 所有政治面貌
    const partyCategory = ref<Array<dictItemType>>([]) // 党员类别
    const partyOrgUser = ref<Array<dictItemType>>([]) // 用户管理-按党组织分组查询
    const govOrg = ref<Array<dictItemType>>([]) // 行政组织管理

    // 生成字典
    const setDict = async () => {
      const regionRes = await getRegionAll() // 获取行政区
      region.value = regionRes.data // 设置行政区
      const politicalRes = await getPoliticalAll() // 获取政治面买
      political.value = politicalRes.data // 设置政治面貌
      const partyCategoryRes = await getPartyCategory() // 获取全部党员类别
      partyCategory.value = partyCategoryRes.data // 设置党员类别
      const partyOrgUserRes = await getPartyOrgUserAll() // 获取用户管理-按党组织分组查询
      partyOrgUser.value = partyOrgUserRes.data // 设置用户管理-按党组织分组查询
      const govOrgRes = await getGovOrgV2All() // 获取行政组织管理
      govOrg.value = govOrgRes.data // 设置行政组织管理
    }

    // 清除所有字典
    const resetDict = () => {
      region.value = []
      political.value = []
      partyCategory.value = []
      partyOrgUser.value = []
      govOrg.value = []
    }

    return {
      region,
      political,
      partyCategory,
      partyOrgUser,
      govOrg,
      setDict,
      resetDict
    }
  },
  {
    // 开启持久化缓存
    persist: {
      enabled: true, // 是否开启pinia数据持久化
      strategies: [
        {
          storage: sessionStorage //表示存储在localStorage
        }
      ]
    }
  }
)
